# Create a sample collection
users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}
print(users)
# Strategy:  Iterate over a copy
for user, status in users.copy().items():
    if status == 'inactive':
        del users[user]

# Strategy:  Create a new collection
active_users = {}
for user, status in users.items():
    if status == 'active':
        active_users[user] = status

print(users)

# users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}
# for user, status in users.items():  # RuntimeError: dictionary changed size during iteration
#     if status == 'inactive':
#         del users[user]

# 这段代码是一个经典的 Python 示例，用于找出 2 到 9 之间的素数（质数），并说明不是素数的数是怎么被整除的。
for n in range(2, 10):                # 遍历数字 2 到 9
    for x in range(2, n):             # 用比 n 小的数字去试除
        if n % x == 0:                # 如果 n 能被 x 整除
            print(n, '=', x, '*', n // x)
            break                     # 找到一个因数就退出内层循环
    else:
        # 如果没有找到因数（即没有 break），说明是素数
        print(n, 'is a prime number')

# （没错，这段代码就是这么写。仔细看：else 子句属于 for 循环，不属于 if 语句。）
# else 子句用于循环时比起 if 语句的 else 子句，更像 try 语句的。try 语句的 else 子句在未发生异常时执行，
# 循环的 else 子句则在未发生 break 时执行。 try 语句和异常详见 异常的处理。

# while True:
#     pass  # Busy-wait for keyboard interrupt (Ctrl+C)

# from enum import Enum
# class Color(Enum):
#     RED = 'red'
#     GREEN = 'green'
#     BLUE = 'blue'
#
# color = Color(input("Enter your choice of 'red', 'blue' or 'green': "))
#
# match color:
#     case Color.RED:
#         print("I see red!")
#     case Color.GREEN:
#         print("Grass is green")
#     case Color.BLUE:
#         print("I'm feeling the blues :(")

from enum import Enum, unique
# 把Student的gender属性改造为枚举类型，可以避免使用字符串：
class Gender(Enum):
    Male = 0
    Female = 1

class Student(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

# 测试:
bart = Student('Bart', Gender.Male)
if bart.gender == Gender.Male:
    print('测试通过!')
else:
    print('测试失败!')
